package cn.s1995.sloth.pay.biz.service;

import cn.s1995.sloth.common.core.constant.enums.hint.Hint;
import cn.s1995.sloth.bizs.exception.BizException;
import cn.s1995.sloth.bizs.oo.req.OrderRefundVerifyREQ;
import cn.s1995.sloth.pay.biz.oo.req.PayParamREQ;
import cn.s1995.sloth.pay.biz.oo.vo.PayParamVO;

/**
 * BizPayService
 *
 * @author Lex
 * @description
 * @date 2024/01/05 14:05
 */
public interface BizPayService {

    /**
     * 支付-前置处理
     * @param payMethod
     */
    default void before(Integer payMethod) {
        throw new BizException(Hint.NON_PAY_CHANNEL_NOT_SUPPORT);
    }

    /**
     * 支付-后置处理
     */
    default void after() {}


    /**
     * 创建支付单
     * @param req
     * @return
     */
    PayParamVO createOrder(PayParamREQ req);

    /**
     * 捕获支付单
     *
     * @param payFlowId        支付流水id
     * @param isNeedPrepareHandler 是否需要预处理
     * @return
     */
    PayParamVO captureOrder(String payFlowId, Boolean... isNeedPrepareHandler);

    /**
     * 退款
     *
     * @param refundId
     * @param req
     */
    void refund(String refundId, OrderRefundVerifyREQ req);

    /**
     * 查询支付结果
     * @param payFlowId
     * @return
     */
    PayParamVO queryOrder(String payFlowId);
}
